﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.Reporting.WinForms;

namespace View
{
    public partial class frmResumos : Form
    {

        String periodoConsulta = String.Empty;
        Util.TipoResumo tipoRelatorio;

        public frmResumos()
        {
            InitializeComponent();
        }

        public frmResumos(String periodoConsulta, Util.TipoResumo tipoRelatorio)
        {
            this.periodoConsulta = periodoConsulta;
            this.tipoRelatorio = tipoRelatorio;
            InitializeComponent();
        }

        private void frmResumos_Load(object sender, EventArgs e)
        {

            switch (this.tipoRelatorio)
            {
                case Util.TipoResumo.RESUMO_ANUAL:

                    #region RelatorioAnual

                    //Cria adaptadores e Popula Valores nas tabelas
                    //Popula Viagens realizadas no ano
                    this.dtGetViagensByAnoTableAdapter.Fill(this.dsDiarias.dtGetViagensByAno, Convert.ToInt32(periodoConsulta));

                    if (this.dsDiarias.dtGetViagensByAno.Rows.Count == 0)
                    {
                        MessageBox.Show("Não existem viagens cadastradas para o ano " + periodoConsulta, "Resumo de Viagens", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Close();
                    }
                    else
                    {
                        Double valorMedioViagens = 0.00;
                        Double valorTotalViagens = 0.00;
                        Int32 qtdRegistros = this.dsDiarias.dtGetViagensByAno.Rows.Count;

                        //Popula Quantidade de Viagens realizadas no ano
                        this.dtQuantidadeViagensByAnoTableAdapter.Fill(this.dsDiarias.dtQuantidadeViagensByAno, Convert.ToInt32(periodoConsulta));

                        //Popula Quantidade de Viagens por Local realizadas no ano
                        this.dtQuantidadeViagensLocalByAnoTableAdapter.Fill(this.dsDiarias.dtQuantidadeViagensLocalByAno, Convert.ToInt32(periodoConsulta));

                        //Calculo do valor total de viagens
                        foreach (DataRow dr in this.dsDiarias.dtQuantidadeViagensByAno.Rows)
                            valorTotalViagens += Convert.ToDouble(dr["VALOR_TOTAL_VIAGENS"]);

                        //Calculo do valor médio de viagens
                        valorMedioViagens = valorTotalViagens / qtdRegistros;

                        //Definindo o relatório a ser visualizado (ReportPath)
                        String caminhoRelatorio = Application.StartupPath + "\\ResumoAno.rdlc";
                        caminhoRelatorio = caminhoRelatorio.Replace("bin\\x86\\Debug\\", "");
                        caminhoRelatorio = caminhoRelatorio.Replace("bin\\x86\\Release\\", "");

                        rptViewer.LocalReport.ReportPath = caminhoRelatorio;

                        rptViewer.LocalReport.DataSources.Add(new ReportDataSource("dsViagensByAno", this.dtGetViagensByAnoBindingSource));
                        rptViewer.LocalReport.DataSources.Add(new ReportDataSource("dsQuantidadeViagensByAno", this.dtQuantidadeViagensByAnoBindingSource));
                        rptViewer.LocalReport.DataSources.Add(new ReportDataSource("dsQtdViagensLocalByAno", this.dtQuantidadeViagensLocalByAnoBindingSource));

                        //Cria parâmetros do relatório
                        ReportParameter rptDtInicio = new ReportParameter("pDataInicio", this.dsDiarias.dtGetViagensByAno.Rows[0][1].ToString()); //atribui a primeira da de saída
                        ReportParameter rptDtFim = new ReportParameter("pDataFim", this.dsDiarias.dtGetViagensByAno.Rows[qtdRegistros - 1][2].ToString()); //atribui a última data de chegada
                        ReportParameter rptAno = new ReportParameter("pAno", this.periodoConsulta);
                        ReportParameter rptNumeroViagens = new ReportParameter("pNumeroViagens", qtdRegistros.ToString());
                        ReportParameter rptTotalViagens = new ReportParameter("pTotalViagens", valorTotalViagens.ToString("0.00"));
                        ReportParameter rptMediaValorViagem = new ReportParameter("pMediaValorViagem", valorMedioViagens.ToString("0.00"));

                        List<ReportParameter> parameters = new List<ReportParameter>();
                        parameters.Add(rptDtInicio);
                        parameters.Add(rptDtFim);
                        parameters.Add(rptAno);
                        parameters.Add(rptNumeroViagens);
                        parameters.Add(rptTotalViagens);
                        parameters.Add(rptMediaValorViagem);

                        rptViewer.LocalReport.SetParameters(parameters);

                        this.rptViewer.RefreshReport();
                    }

                    break;

                    #endregion

                case Util.TipoResumo.RESUMO_MENSAL:

                    #region RelatorioMensal

                    //Cria adaptadores e Popula Valores nas tabelas
                    //Popula Viagens realizadas no ano
                    this.dtGetViagensByMesAnoTableAdapter.Fill(this.dsDiarias.dtGetViagensByMesAno, periodoConsulta);

                    if (this.dsDiarias.dtGetViagensByMesAno.Rows.Count == 0)
                    {
                        MessageBox.Show("Não existem viagens cadastradas para o período " + periodoConsulta, "Resumo de Viagens", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Close();
                    }
                    else
                    {
                        Double valorMedioViagens = 0.00;
                        Double valorTotalViagens = 0.00;
                        Int32 qtdRegistros = this.dsDiarias.dtGetViagensByMesAno.Rows.Count;

                        //Popula Quantidade de Viagens realizadas no ano
                        this.dtQuantidadeViagensByMesAnoTableAdapter.Fill(this.dsDiarias.dtQuantidadeViagensByMesAno, periodoConsulta);

                        //Popula Quantidade de Viagens por Local realizadas no ano
                        this.dtQuantidadeViagensLocalByMesAnoTableAdapter.Fill(this.dsDiarias.dtQuantidadeViagensLocalByMesAno, periodoConsulta);

                        //Calculo do valor total de viagens
                        foreach (DataRow dr in this.dsDiarias.dtQuantidadeViagensByMesAno.Rows)
                            valorTotalViagens += Convert.ToDouble(dr["VALOR_TOTAL_VIAGENS"]);

                        //Calculo do valor médio de viagens
                        valorMedioViagens = valorTotalViagens / qtdRegistros;

                        //Definindo o relatório a ser visualizado (ReportPath)
                        String caminhoRelatorio = Application.StartupPath + "\\ResumoMes.rdlc";
                        caminhoRelatorio = caminhoRelatorio.Replace("bin\\x86\\Debug\\", "");
                        caminhoRelatorio = caminhoRelatorio.Replace("bin\\x86\\Release\\", "");

                        rptViewer.LocalReport.ReportPath = caminhoRelatorio;

                        rptViewer.LocalReport.DataSources.Add(new ReportDataSource("dsViagensByMesAno", this.dtGetViagensByMesAnoBindingSource));
                        rptViewer.LocalReport.DataSources.Add(new ReportDataSource("dsQuantidadeViagensByMesAno", this.dtQuantidadeViagensByMesAnoBindingSource));
                        rptViewer.LocalReport.DataSources.Add(new ReportDataSource("dsQtdViagensLocalByMesAno", this.dtQuantidadeViagensLocalByMesAnoBindingSource));

                        //Cria parâmetros do relatório
                        ReportParameter rptDtInicio = new ReportParameter("pDataInicio", this.dsDiarias.dtGetViagensByMesAno.Rows[0][1].ToString()); //atribui a primeira da de saída
                        ReportParameter rptDtFim = new ReportParameter("pDataFim", this.dsDiarias.dtGetViagensByMesAno.Rows[qtdRegistros - 1][2].ToString()); //atribui a última data de chegada
                        ReportParameter rptNumeroViagens = new ReportParameter("pNumeroViagens", qtdRegistros.ToString());
                        ReportParameter rptTotalViagens = new ReportParameter("pTotalViagens", valorTotalViagens.ToString("0.00"));
                        ReportParameter rptMediaValorViagem = new ReportParameter("pMediaValorViagem", valorMedioViagens.ToString("0.00"));

                        List<ReportParameter> parameters = new List<ReportParameter>();
                        parameters.Add(rptDtInicio);
                        parameters.Add(rptDtFim);
                        parameters.Add(rptNumeroViagens);
                        parameters.Add(rptTotalViagens);
                        parameters.Add(rptMediaValorViagem);

                        rptViewer.LocalReport.SetParameters(parameters);

                        this.rptViewer.RefreshReport();
                    }

                    break;

                    #endregion

                default:
                    break;
            }
            
     
        }
    }
}
